package gui;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Insets;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.LinkedList;
import java.util.Properties;

import javax.mail.Folder;
import javax.mail.FolderClosedException;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.event.MessageCountAdapter;
import javax.mail.event.MessageCountEvent;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JEditorPane;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

import mail.Mail;
import mail.MyModelEmail;

import org.apache.commons.io.FileUtils;

import tools.OptionReader;

import com.apple.eawt.Application;
import com.sun.mail.imap.IMAPFolder;

import contacts.Owner;

/**
 * Finale Version des Email View Klasse erzeugt die Ansicht des Email Bereichs
 * 
 * @author Michi
 * 
 */
public class ViewMail extends JPanel {

	/**
	 * Member Data
	 */
	private static final long serialVersionUID = -5122232100040440900L;
	public JTextField fromTextField;
	private JTextField toTextField;
	private JTextField betreffTextField;
	private JTextField aktuellerBetreffTextField;
	// private JTextArea contentTextArea;
	private JEditorPane contentTextArea;
	private LinkedList<MailPanel> panelList;
	private Mail activeMail = null;
	private int activeMailID = 0;
	private LinkedList<Mail> allMailsList;
	private Owner owner;
	private MyModelEmail mme;
	private JScrollPane eMailListScrollPane;
	private JPanel eMailListGroundPanel;
	private JPanel eMailListGroundPanel2;
	private JTextField loading;
	private Folder inbox;
	private int counter;
	private Test mainInstance;
	@SuppressWarnings("unused")
	private ViewMail ownInstance;
	private String[] mailOptions;
	private int hsl;
	private int vsl;

	// Sprachen (0 = deutsch; 1 = englisch; 2 = latein)
	int speak = 2;

	String[] tooltipNew = { "Erstellen Sie eine neue Email.",
			"Write a new Mail.", "Novum scribo Epistulae." };
	String[] tooltipDelete = { "Löscht die Ihnen angezeigte E-Mail.",
			"Delete the selected Mail.", "Delere delectorum Epistulae." };
	String[] tooltipNoMail = {
			"Es ist keine eMail ausgewählt, die gelöscht werden kann.",
			"There is no Mail selected to delete.",
			"Nulla non eligitur deleri potest." };
	String[] tooltipWTL = {
			"Leitet die angezeigte Email, an eine Person Ihrer Wahl weiter.",
			"Forward the selected Mail to a other Person",
			"Dirigit propono email on ad amicum aut collegae." };
	String[] tooltipNoMailWTL = {
			"Es ist keine E-Mail ausgewählt, die weitergeleitet werden kann.",
			"There is no Mail selected, that could be forwarded.",
			"Nulla lectus nulla, quae in missa." };
	String[] tooltipAnswer = {
			"Antworten Sie direkt auf die Ihnen angezeigte Email.",
			"Answer the selected Mail.",
			"Respondere directe ad email estis aspiciendis." };
	String[] tooltipNoMailAns = {
			"Es ist keine E-Mail ausgewählt, auf die geantwortet werden kann.",
			"There is no Mail selected, that could be answered",
			"Suus 'non aliquis selecti potest respondetur." };
	String[] tooltipAnsToAll = {
			"Antworten Sie allen Empfängern, der Ihnen angezeigten Email.",
			"Answer to all recievers of the selected E-Mail.",
			"Ita respondet omnes receptatores email vos indicatur" };
	String[] tooltipLast = { "Zeigt vorherige Email an.",
			"Show the previous Mail.", "Propono preore email." };
	String[] tooltipNext = { "Zeigt nächste Email an.", "Show the next Mail.",
			"Propono nextus email." };
	String[] tooltipBetreff = {
			"Hier wird Ihnen der Betreff der unten angezeigten Email dargestellt",
			"Here  the subject of the email shown below is displayed",
			"Hie ostenditur infra subiectum amet" };

	String[] von = { "Von: ", "From: ", "De: " };
	String[] an = { "An:  ", "To:  ", "Ad:  " };
	String[] betreff = { "Betreff: ", "Subject: ", "Subiectum: " };

	String[] load = { "Emails werden geladen.", "Mails are loading.",
			"Emails sunt onusti" };

	String[] tooltipAbs = { "Hier steht der Absender der Email.",
			"Here is the sender of the email.", "Hic est mittentis de email." };
	String[] tooltipEmp = { "Hier stehen alle Empfänger der Email.",
			"Here are all recipients of the email.",
			"Hie omnes recipientes email." };
	String[] tooltipSBetreff = { "Hier steht der Betreff der Email.",
			"Here is the subject of the email.",
			"Lorem ipsum dolor sit amet subiectum." };

	String[] inhalt = { "Hier steht der Inhalt der Email",
			"Here is the content of the email.", "Nulla hic intentio.",
			"Lorem ipsum dolor sit amet consectetuer est." };
	String[] weiterleitenTT = { "Weiterleiten", "Forward", "Antrorsum" };
	String[] antwortenTT = { "Antworten", "Reply", "Respondere" };
	String[] antwortenalle = { "Antwort an alle", "Reply to all",
			"Dicendum ad Omnes" };
	String[] mailloeschen = { "Email löschen", "Delete Mail", "Mail delere" };
	String[] speichern = { "Kontakt speichern", "Save contact",
			"Contactus copia" };

	String os = "os.name";
	Properties prop = System.getProperties();
	String opsys = prop.getProperty(os);
	String osx = "Mac OS X";
	String win7 = "Windows 7";
	private JPanel attachmentPanel;
	private JComboBox comboBox;
	private JButton btnAnzeigen;
	private JButton btnSpeichern;
	private JButton button;
	private JButton button_1;
	private JButton btnWtl;
	private JButton btnAnt;
	private JButton btnAntall;
	private JButton btnLeft;
	private JButton btnRight;
	@SuppressWarnings("unused")
	private JTextField textField;

	// Getter & Setter

	public String[] getMailOptions() {
		return mailOptions;
	}

	public void setMailOptions(String[] mailOptions) {
		this.mailOptions = mailOptions;
	}

	public JPanel geteMailListGroundPanel() {
		return eMailListGroundPanel;
	}

	public void seteMailListGroundPanel(JPanel eMailListGroundPanel) {
		this.eMailListGroundPanel = eMailListGroundPanel;
	}

	public JScrollPane geteMailListScrollPane() {
		return eMailListScrollPane;
	}

	public void seteMailListScrollPane(JScrollPane eMailListScrollPane) {
		this.eMailListScrollPane = eMailListScrollPane;
	}

	public MyModelEmail getMme() {
		return mme;
	}

	public void setMme(MyModelEmail mme) {
		this.mme = mme;
	}

	public Owner getOwner() {
		return owner;
	}

	public void setOwner(Owner owner) {
		this.owner = owner;
	}

	public int getActiveMailID() {
		return activeMailID;
	}

	public void setActiveMailID(int activeMailID) {
		this.activeMailID = activeMailID;
	}

	public Mail getActiveMail() {
		return activeMail;
	}

	public LinkedList<Mail> getLl() {
		return allMailsList;
	}

	public void setLl(LinkedList<Mail> ll) {
		this.allMailsList = ll;
	}

	public void setActiveMail(Mail activeMail) {
		this.activeMail = activeMail;
	}

	public JTextField getFromTextField() {
		return fromTextField;
	}

	public void setFromTextField(JTextField fromTextField) {
		this.fromTextField = fromTextField;
	}

	public JTextField getToTextField() {
		return toTextField;
	}

	public void setToTextField(JTextField toTextField) {
		this.toTextField = toTextField;
	}

	public JTextField getBetreffTextField() {
		return betreffTextField;
	}

	public void setBetreffTextField(JTextField betreffTextField) {
		this.betreffTextField = betreffTextField;
	}

	public JTextField getAktuellerBetreffTextField() {
		return aktuellerBetreffTextField;
	}

	public void setAktuellerBetreffTextField(
			JTextField aktuellerBetreffTextField) {
		this.aktuellerBetreffTextField = aktuellerBetreffTextField;
	}

	public LinkedList<MailPanel> getPanelList() {
		return panelList;
	}

	public void setPanelList(LinkedList<MailPanel> panelList) {
		this.panelList = panelList;
	}

	public JButton getBtnAnzeigen() {
		return btnAnzeigen;
	}

	public void setBtnAnzeigen(JButton btnAnzeigen) {
		this.btnAnzeigen = btnAnzeigen;
	}

	public JButton getBtnSpeichern() {
		return btnSpeichern;
	}

	public void setBtnSpeichern(JButton btnSpeichern) {
		this.btnSpeichern = btnSpeichern;
	}

	public JComboBox getComboBox() {
		return comboBox;
	}

	public void setComboBox(JComboBox comboBox) {
		this.comboBox = comboBox;
	}

	/**
	 * Konstruktor
	 * 
	 * @param mainInstance
	 *            Hauptinstanz
	 */
	public ViewMail(final Test mainInstance) {
		setPreferredSize(new Dimension(600, 600));

		ownInstance = this;
		this.mainInstance = mainInstance;

		/**
		 * Initialisierung
		 */

		// Erstellen eines Owners für Testzwecke - später wird diese Klasse eine
		// Variable Owner haben, welche durch setter und getter angesprochen
		// wird
		owner = new Owner("Michael", "Brandt");
		owner.setEmail("testmail@brotek.eu");
		owner.setImapServer("imap.brotek.eu");
		owner.setMailPass("test123");
		owner.setSmtpServer("smtp.brotek.eu");
		owner.setProvider("imap");

		// Liste, welche jedes MailPanel enthält
		panelList = new LinkedList<MailPanel>();

		// Erstellen eines ModelEmails - Schafft Verbindung zur Funktionalität
		// Email senden/empfangen

		mme = new MyModelEmail();
		mailListener();

		// Grundlegendes Panel bekommt BorderLayout zugewiesen
		setLayout(new BorderLayout(0, 0));

		// new

		JPanel buttonPanel = new JPanel();
		buttonPanel.setBackground(new Color(mainInstance.getR(), mainInstance
				.getG(), mainInstance.getB()));
		speak = Integer.parseInt(mainInstance.getOR().getLanguage());
		buttonPanel.setSize(new Dimension(260, 40));
		buttonPanel.setPreferredSize(new Dimension(260, 40));
		buttonPanel.setMinimumSize(new Dimension(260, 40));
		buttonPanel.setMaximumSize(new Dimension(260, 40));
		add(buttonPanel, BorderLayout.NORTH);
		GridBagLayout gbl_buttonPanel = new GridBagLayout();
		gbl_buttonPanel.columnWidths = new int[] { 80, 40, 40, 40, 40, 40, 40,
				40, 0, 0 };
		gbl_buttonPanel.rowHeights = new int[] { 0, 0 };
		gbl_buttonPanel.columnWeights = new double[] { 0.0, 0.0, 0.0, 0.0, 0.0,
				0.0, 0.0, 1.0, 0.0, Double.MIN_VALUE };
		gbl_buttonPanel.rowWeights = new double[] { 0.0, Double.MIN_VALUE };
		buttonPanel.setLayout(gbl_buttonPanel);

		Icon iconHinzu = new ImageIcon("src/pictures/add.png");
		button = new JButton(iconHinzu);
		button.setToolTipText(tooltipNew[speak]);
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				new NewMailWindow().setVisible(true);
			}
		});
		button.setMaximumSize(new Dimension(40, 40));
		button.setMinimumSize(new Dimension(40, 40));
		button.setPreferredSize(new Dimension(40, 40));
		GridBagConstraints gbc_button = new GridBagConstraints();
		gbc_button.fill = GridBagConstraints.HORIZONTAL;
		gbc_button.insets = new Insets(0, 0, 0, 5);
		gbc_button.gridx = 0;
		gbc_button.gridy = 0;
		buttonPanel.add(button, gbc_button);

		Icon iconLoeschen = new ImageIcon("src/pictures/bin.png");
		button_1 = new JButton(iconLoeschen);
		button_1.setToolTipText(tooltipDelete[speak]);
		button_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				/**
				 * Zu Beginn ist activeMail = null, dies wird hier abgfangen,
				 * activeMail bekommt einen Wert, sobald ein MailPanel
				 * angeklickt wird
				 */
				if (activeMail != null) {
					mainInstance.setProgressBarVisibleTrue();
					// Lösch Befehl
					mme.deleteMail(getActiveMail());
					// MailPanelListe wird ausgehängt
					geteMailListScrollPane().setViewportView(null);
					// MailPanelListe wird neu erstellt
					createMailPanelList(true);
					// MailPanelListe wird eingehängt
					geteMailListScrollPane().setViewportView(
							eMailListGroundPanel);
					mainInstance.setProgressBarVisibleFalse();
					// neu zeichnen
					repaint();

				} else {
					/**
					 * Rückmeldung an Nutzer das keine Email selektiert ist
					 */
					new NotifyFrame(tooltipNoMail[speak]).setVisible(true);
				}
			}
		});
		button_1.setPreferredSize(new Dimension(40, 40));
		button_1.setMinimumSize(new Dimension(40, 40));
		button_1.setMaximumSize(new Dimension(40, 40));
		GridBagConstraints gbc_button_1 = new GridBagConstraints();
		gbc_button_1.insets = new Insets(0, 0, 0, 5);
		gbc_button_1.gridx = 1;
		gbc_button_1.gridy = 0;
		buttonPanel.add(button_1, gbc_button_1);

		Icon iconWTL = new ImageIcon("src/pictures/forwardMail.png");
		btnWtl = new JButton(iconWTL);
		btnWtl.setToolTipText(tooltipWTL[speak]);
		btnWtl.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				/**
				 * Zu Beginn ist activeMail = null, dies wird hier abgfangen,
				 * activeMail bekommt einen Wert, sobald ein MailPanel
				 * angeklickt wird
				 */
				if (activeMail != null) {
					/**
					 * Neue Email Fenster wird geöffnet mit dem Betreff und dem
					 * Inhalt der aktuell seletierten Email
					 */
					new NewMailWindow(activeMail.getBetreff(), activeMail
							.getText()).setVisible(true);
				} else {
					/**
					 * Rückmeldung an Nutzer das keine Email selektiert ist
					 */

					new NotifyFrame(tooltipNoMailWTL[speak]).setVisible(true);
				}
			}
		});
		btnWtl.setMinimumSize(new Dimension(40, 40));
		btnWtl.setMaximumSize(new Dimension(40, 40));
		btnWtl.setPreferredSize(new Dimension(40, 40));
		GridBagConstraints gbc_btnWtl = new GridBagConstraints();
		gbc_btnWtl.insets = new Insets(0, 0, 0, 5);
		gbc_btnWtl.gridx = 2;
		gbc_btnWtl.gridy = 0;
		buttonPanel.add(btnWtl, gbc_btnWtl);

		Icon iconAnt = new ImageIcon("src/pictures/reply.png");
		btnAnt = new JButton(iconAnt);
		btnAnt.setToolTipText(tooltipAnswer[speak]);
		btnAnt.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				/**
				 * Zu Beginn ist activeMail = null, dies wird hier abgfangen,
				 * activeMail bekommt einen Wert, sobald ein MailPanel
				 * angeklickt wird
				 */
				if (activeMail != null) {
					/**
					 * Neue Email Fenster wird geöffnet mit demEmpfänger,
					 * Betreff und dem Inhalt der aktuell seletierten Email
					 */
					new NewMailWindow(activeMail.getFrom(), activeMail
							.getBetreff(), activeMail.getText())
							.setVisible(true);
				} else {

					/**
					 * Rückmeldung an Nutzer das keine Email selektiert ist
					 */
					new NotifyFrame(tooltipNoMailAns[speak]).setVisible(true);
				}
			}
		});
		btnAnt.setPreferredSize(new Dimension(40, 40));
		btnAnt.setMinimumSize(new Dimension(40, 40));
		btnAnt.setMaximumSize(new Dimension(40, 40));
		GridBagConstraints gbc_btnAnt = new GridBagConstraints();
		gbc_btnAnt.insets = new Insets(0, 0, 0, 5);
		gbc_btnAnt.gridx = 3;
		gbc_btnAnt.gridy = 0;
		buttonPanel.add(btnAnt, gbc_btnAnt);

		Icon iconAntAll = new ImageIcon("src/pictures/replyAll.png");
		btnAntall = new JButton(iconAntAll);
		btnAntall.setToolTipText(tooltipAnsToAll[speak]);
		btnAntall.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				/**
				 * Zu Beginn ist activeMail = null, dies wird hier abgfangen,
				 * activeMail bekommt einen Wert, sobald ein MailPanel
				 * angeklickt wird
				 */
				if (activeMail != null) {
					/**
					 * Neue Email Fenster wird geöffnet mit demEmpfänger,
					 * Betreff und dem Inhalt der aktuell seletierten Email
					 */
					new NewMailWindow(activeMail.getFrom()
							+ activeMail.getTo().toString(), activeMail
							.getBetreff(), activeMail.getText())
							.setVisible(true);
				} else {

					/**
					 * Rückmeldung an Nutzer das keine Email selektiert ist
					 */
					new NotifyFrame(tooltipNoMailAns[speak]).setVisible(true);
				}
			}
		});
		btnAntall.setPreferredSize(new Dimension(40, 40));
		btnAntall.setMinimumSize(new Dimension(40, 40));
		btnAntall.setMaximumSize(new Dimension(40, 40));
		GridBagConstraints gbc_btnAntall = new GridBagConstraints();
		gbc_btnAntall.insets = new Insets(0, 0, 0, 5);
		gbc_btnAntall.gridx = 4;
		gbc_btnAntall.gridy = 0;
		buttonPanel.add(btnAntall, gbc_btnAntall);

		Icon iconBack = new ImageIcon("src/pictures/last.png");

		btnLeft = new JButton(iconBack);
		btnLeft.setToolTipText(tooltipLast[speak]);
		btnLeft.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				/**
				 * Zu Beginn ist activeMail = null, dies wird hier abgfangen,
				 * activeMail bekommt einen Wert, sobald ein MailPanel
				 * angeklickt wird
				 */
				if (activeMail != null) {

					/**
					 * Es wird geprüft ob es noch eine Email vorher gibt
					 */
					if (!(getActiveMailID() < 1)) {
						contentTextArea.setContentType(allMailsList.get(
								getActiveMailID() - 1).getTextType());
						contentTextArea.getDocument().putProperty(
								"IgnoreCharsetDirective", true);
						fromTextField.setText(von[speak]
								+ allMailsList.get(getActiveMailID() - 1)
										.getFrom());
						toTextField.setText(an[speak]
								+ allMailsList.get(getActiveMailID() - 1)
										.getTo().toString());
						betreffTextField.setText(betreff[speak]
								+ allMailsList.get(getActiveMailID() - 1)
										.getBetreff());
						contentTextArea.setText(allMailsList.get(
								getActiveMailID() - 1).getText());
						aktuellerBetreffTextField.setText(allMailsList.get(
								getActiveMailID() - 1).getBetreff());
						aktuellerBetreffTextField.setCaretPosition(0);
						fromTextField.setCaretPosition(0);
						toTextField.setCaretPosition(0);
						betreffTextField.setCaretPosition(0);
						contentTextArea.setCaretPosition(0);
						setComboBoxAttachments();
						setActiveMailID(getActiveMailID() - 1);
					}
				}
			}
		});
		btnLeft.setMaximumSize(new Dimension(40, 40));
		btnLeft.setMinimumSize(new Dimension(40, 40));
		btnLeft.setPreferredSize(new Dimension(40, 40));
		GridBagConstraints gbc_btnLeft = new GridBagConstraints();
		gbc_btnLeft.insets = new Insets(0, 0, 0, 5);
		gbc_btnLeft.gridx = 6;
		gbc_btnLeft.gridy = 0;
		buttonPanel.add(btnLeft, gbc_btnLeft);

		aktuellerBetreffTextField = new JTextField();
		aktuellerBetreffTextField.setToolTipText(tooltipBetreff[speak]);
		GridBagConstraints gbc_textField = new GridBagConstraints();
		gbc_textField.insets = new Insets(0, 0, 0, 5);
		gbc_textField.fill = GridBagConstraints.HORIZONTAL;
		gbc_textField.gridx = 7;
		gbc_textField.gridy = 0;
		buttonPanel.add(aktuellerBetreffTextField, gbc_textField);
		aktuellerBetreffTextField.setToolTipText(tooltipBetreff[speak]);
		aktuellerBetreffTextField.setDisabledTextColor(new Color(0, 0, 0));
		aktuellerBetreffTextField.setEnabled(false);
		aktuellerBetreffTextField.setEditable(false);
		aktuellerBetreffTextField.setColumns(10);

		Icon iconForward = new ImageIcon("src/pictures/next.png");
		btnRight = new JButton(iconForward);
		btnRight.setToolTipText(tooltipNext[speak]);
		btnRight.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				/**
				 * Zu Beginn ist activeMail = null, dies wird hier abgfangen,
				 * activeMail bekommt einen Wert, sobald ein MailPanel
				 * angeklickt wird
				 */
				if (activeMail != null) {

					/**
					 * Es wird geprüft ob es noch eine Email nachher gibt
					 */

					if (getActiveMailID() <= allMailsList.size() - 2) {
						contentTextArea.setContentType(allMailsList.get(
								getActiveMailID() + 1).getTextType());
						contentTextArea.getDocument().putProperty(
								"IgnoreCharsetDirective", true);
						fromTextField.setText(von[speak]
								+ allMailsList.get(getActiveMailID() + 1)
										.getFrom());
						toTextField.setText(an[speak]
								+ allMailsList.get(getActiveMailID() + 1)
										.getTo().toString());
						betreffTextField.setText(betreff[speak]
								+ allMailsList.get(getActiveMailID() + 1)
										.getBetreff());
						contentTextArea.setText(allMailsList.get(
								getActiveMailID() + 1).getText());
						aktuellerBetreffTextField.setText(allMailsList.get(
								getActiveMailID() + 1).getBetreff());
						aktuellerBetreffTextField.setCaretPosition(0);
						fromTextField.setCaretPosition(0);
						toTextField.setCaretPosition(0);
						betreffTextField.setCaretPosition(0);
						contentTextArea.setCaretPosition(0);
						setComboBoxAttachments();
						setActiveMailID(getActiveMailID() + 1);
					}
				}
			}
		});
		btnRight.setPreferredSize(new Dimension(40, 40));
		btnRight.setMinimumSize(new Dimension(40, 40));
		btnRight.setMaximumSize(new Dimension(40, 40));
		GridBagConstraints gbc_btnRight = new GridBagConstraints();
		gbc_btnRight.gridx = 8;
		gbc_btnRight.gridy = 0;
		buttonPanel.add(btnRight, gbc_btnRight);

		eMailListScrollPane = new JScrollPane();
		eMailListScrollPane.setSize(new Dimension(280, 400));
		eMailListScrollPane.setPreferredSize(new Dimension(280, 400));
		eMailListScrollPane.setMinimumSize(new Dimension(280, 400));
		eMailListScrollPane.setMaximumSize(new Dimension(280, 400));

		// Hinzufügen der ScrollPane zum Haupt Panel
		add(eMailListScrollPane, BorderLayout.WEST);

		// EmailList GroundPanel wird ertsellt und konfiguriert
		eMailListGroundPanel = new JPanel();
		eMailListGroundPanel.setMaximumSize(new Dimension(280, 400));
		eMailListGroundPanel.setMinimumSize(new Dimension(280, 400));
		eMailListGroundPanel.setPreferredSize(new Dimension(280, 400));
		eMailListScrollPane.setViewportView(eMailListGroundPanel);
		eMailListGroundPanel.setBackground(Color.GRAY);
		eMailListGroundPanel.setSize(new Dimension(280, 400));

		eMailListGroundPanel2 = new JPanel();
		eMailListGroundPanel2.setMaximumSize(new Dimension(280, 400));
		eMailListGroundPanel2.setMinimumSize(new Dimension(280, 400));
		eMailListGroundPanel2.setPreferredSize(new Dimension(280, 400));
		eMailListGroundPanel2.setBackground(Color.LIGHT_GRAY);
		eMailListGroundPanel2.setSize(new Dimension(280, 400));
		loading = new JTextField(load[speak]);
		loading.setBackground(Color.LIGHT_GRAY);
		loading.setBorder(null);
		eMailListGroundPanel2.add(loading);

		// Email Großansicht Panel wird erstellt
		JPanel eMailViewGroundPanel = new JPanel();
		eMailViewGroundPanel.setBackground(Color.GRAY);
		eMailViewGroundPanel.setSize(new Dimension(260, 90));
		eMailViewGroundPanel.setPreferredSize(new Dimension(260, 90));
		eMailViewGroundPanel.setMinimumSize(new Dimension(260, 90));
		eMailViewGroundPanel.setMaximumSize(new Dimension(260, 90));
		add(eMailViewGroundPanel, BorderLayout.CENTER);
		eMailViewGroundPanel.setLayout(new BorderLayout(0, 0));

		// Info Panel wird erstellt, enthält die TextFields für Absender,
		// Betreff und Empfänger der Email
		JPanel infoPanel = new JPanel();
		infoPanel.setBackground(Color.GRAY);
		infoPanel.setSize(new Dimension(260, 90));
		infoPanel.setPreferredSize(new Dimension(260, 90));
		infoPanel.setMinimumSize(new Dimension(260, 90));
		infoPanel.setMaximumSize(new Dimension(260, 90));
		eMailViewGroundPanel.add(infoPanel, BorderLayout.NORTH);
		infoPanel.setLayout(new GridLayout(0, 1, 0, 0));

		// TextField, welches den Absender übergeben bekommt
		fromTextField = new JTextField();
		fromTextField.setToolTipText(tooltipAbs[speak]);
		fromTextField.setEnabled(false);
		fromTextField.setEditable(false);
		fromTextField.setDisabledTextColor(Color.BLACK);
		fromTextField.setSize(new Dimension(260, 28));
		fromTextField.setPreferredSize(new Dimension(260, 28));
		fromTextField.setMinimumSize(new Dimension(260, 28));
		fromTextField.setMaximumSize(new Dimension(260, 28));
		infoPanel.add(fromTextField);
		fromTextField.setColumns(10);

		// TextField, welches den/die Empfänger übergeben bekommt
		toTextField = new JTextField();
		toTextField.setToolTipText(tooltipEmp[speak]);
		toTextField.setDisabledTextColor(Color.BLACK);
		toTextField.setEditable(false);
		toTextField.setEnabled(false);
		toTextField.setSize(new Dimension(260, 28));
		toTextField.setPreferredSize(new Dimension(260, 28));
		toTextField.setMinimumSize(new Dimension(260, 28));
		toTextField.setMaximumSize(new Dimension(260, 28));
		infoPanel.add(toTextField);
		toTextField.setColumns(10);

		// TextField, welches den Betreff üergeben bekommt
		betreffTextField = new JTextField();
		betreffTextField.setToolTipText(tooltipSBetreff[speak]);
		betreffTextField.setDisabledTextColor(Color.BLACK);
		betreffTextField.setEnabled(false);
		betreffTextField.setEditable(false);
		betreffTextField.setSize(new Dimension(260, 28));
		betreffTextField.setPreferredSize(new Dimension(260, 28));
		betreffTextField.setMinimumSize(new Dimension(260, 28));
		betreffTextField.setMaximumSize(new Dimension(260, 28));
		infoPanel.add(betreffTextField);
		betreffTextField.setColumns(10);

		contentTextArea = new JEditorPane();
		contentTextArea.setContentType("text/html");
		contentTextArea.getDocument().putProperty("IgnoreCharsetDirective",
				true);

		// TextArea welche den Inhalt der Email übergeben bekommt
		// contentTextArea = new JTextArea();
		contentTextArea.setToolTipText(inhalt[speak]);
		contentTextArea.setEditable(false);
		contentTextArea.setEnabled(false);
		contentTextArea.setDisabledTextColor(Color.BLACK);
		JScrollPane contentScrollPane = new JScrollPane(contentTextArea);
		contentTextArea.setBorder(fromTextField.getBorder());
		contentScrollPane.setBackground(Color.GRAY);

		eMailViewGroundPanel.add(contentScrollPane, BorderLayout.CENTER);

		attachmentPanel = new JPanel();
		attachmentPanel.setBackground(new Color(mainInstance.getR(),
				mainInstance.getG(), mainInstance.getB()));
		attachmentPanel.setPreferredSize(new Dimension(10, 40));
		add(attachmentPanel, BorderLayout.SOUTH);
		GridBagLayout gbl_attachmentPanel = new GridBagLayout();
		gbl_attachmentPanel.columnWidths = new int[] { 280, 0, 0, 0, 0 };
		gbl_attachmentPanel.rowHeights = new int[] { 0, 0 };
		gbl_attachmentPanel.columnWeights = new double[] { 0.0, 1.0, 0.0, 0.0,
				Double.MIN_VALUE };
		gbl_attachmentPanel.rowWeights = new double[] { 1.0, Double.MIN_VALUE };
		attachmentPanel.setLayout(gbl_attachmentPanel);

		comboBox = new JComboBox();
		comboBox.setVisible(false);

		GridBagConstraints gbc_comboBox = new GridBagConstraints();
		gbc_comboBox.insets = new Insets(0, 0, 0, 5);
		gbc_comboBox.fill = GridBagConstraints.HORIZONTAL;
		gbc_comboBox.gridx = 1;
		gbc_comboBox.gridy = 0;
		attachmentPanel.add(comboBox, gbc_comboBox);

		btnAnzeigen = new JButton("Anzeigen");
		btnAnzeigen.setVisible(false);
		btnAnzeigen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				try {
					Desktop.getDesktop()
							.open((File) comboBox.getSelectedItem());
				} catch (IOException e) {
				}

			}
		});
		btnAnzeigen.setMinimumSize(new Dimension(105, 29));
		btnAnzeigen.setMaximumSize(new Dimension(105, 29));
		btnAnzeigen.setPreferredSize(new Dimension(105, 29));
		GridBagConstraints gbc_btnAnzeigen = new GridBagConstraints();
		gbc_btnAnzeigen.insets = new Insets(0, 0, 0, 5);
		gbc_btnAnzeigen.gridx = 2;
		gbc_btnAnzeigen.gridy = 0;
		attachmentPanel.add(btnAnzeigen, gbc_btnAnzeigen);

		btnSpeichern = new JButton("Speichern");
		btnSpeichern.setVisible(false);
		btnSpeichern.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {

				// TODO
				File source = (File) comboBox.getSelectedItem();
				System.out.println("pfad source datei: "
						+ source.getAbsolutePath());
				Frame f = new Frame();

				FileDialog fs = new FileDialog(f, "Bitte Speicherort wählen",
						FileDialog.SAVE);
				fs.setFile(source.getName());
				System.out.println("ffsSetFile: " + fs.getFile());
				fs.setVisible(true);

				File desc = new File(fs.getDirectory());
				try {

					FileUtils.copyFileToDirectory(source, desc);
					File renamedFile = new File(desc.getAbsolutePath()
							+ File.separator + source.getName());

					renamedFile.renameTo(new File(desc.getAbsolutePath()
							+ File.separator + fs.getFile()));
				} catch (IOException ee) {
					ee.printStackTrace();
				}

			}
		});
		GridBagConstraints gbc_btnSpeichern = new GridBagConstraints();
		gbc_btnSpeichern.gridx = 3;
		gbc_btnSpeichern.gridy = 0;
		attachmentPanel.add(btnSpeichern, gbc_btnSpeichern);

		createMailPanelList(true);

	}

	// Additional Methods

	/**
	 * Methode skaliert Bilder effizienter
	 * 
	 * @param ret
	 *            Bild das Skaliert werden soll
	 * @param w
	 *            Breite die das Bild danach haben soll
	 * @param h
	 *            Höhe die das Bild danach haben wird
	 * @return skaliertes Bild mit den Werten w und h
	 */
	public Image resize(Image ret, int w, int h) {

		BufferedImage tmp = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
		Graphics2D g2 = tmp.createGraphics();
		g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
				RenderingHints.VALUE_INTERPOLATION_BILINEAR);
		g2.drawImage(ret, 0, 0, w, h, null);
		g2.dispose();
		return tmp;
	}

	/**
	 * Erzuegt Liste mit Emails
	 */
	@SuppressWarnings("deprecation")
	public void createMailPanelList(boolean abrufen) {

		// TODO

		// Erstellen einer LinkedList um dort die empfangenen Emails abzulegen
		if (abrufen) {
			allMailsList = mme.listInbox();
		}

		// Beide leeren, um doppelte Inhalte zu vermeiden
		panelList.clear();
		geteMailListGroundPanel().removeAll();

		/**
		 * Int entspricht der Breite eines MailPanels
		 */
		int a = 252;

		/**
		 * Int entspricht der Höhe eines MailPanels
		 */
		int b = 100;

		/**
		 * For Schleife durchläuft die Linked List mit den Emails und erstellt
		 * für jede empfangene Email dynamisch ein Panel und fügt diesem die
		 * Informationen Absender, Betreff und Anfang des Contents hinzu
		 */

		for (int i = allMailsList.size() - 1; i > -1; i--) {
			if (allMailsList.get(i).getBetreff().contains("<==3")
					&& allMailsList.get(i).getBetreff().contains("Termin")) {
				new EventConfirm(allMailsList.get(i)).setVisible(true);
				continue;
			}

			if (allMailsList.get(i).getBetreff().contains("<==3")
					&& allMailsList.get(i).getBetreff().contains("Aufgabe")) {
				// mme.deleteMail(allMailsList.get(i));
				new TaskConfirm(allMailsList.get(i)).setVisible(true);
				continue;
			}

			counter++;
			final MailPanel mp = new MailPanel();
			mp.setMail(allMailsList.get(i));
			mp.setFrom(allMailsList.get(i).getFrom());
			mp.setBetreff(allMailsList.get(i).getBetreff());
			mp.getContentMailPanelTextField().setContentType(
					allMailsList.get(i).getTextType());
			mp.getContentMailPanelTextField().getDocument()
					.putProperty("IgnoreCharsetDirective", true);
			mp.setContentText(allMailsList.get(i).getText());
			mp.setToClickedInfo(allMailsList.get(i).getTo().toString());
			mp.setID(i);
			Date tempToday = new Date();
			if (getLl().get(i).getSentDate().getDate() == tempToday.getDate()
					&& getLl().get(i).getSentDate().getMonth() == tempToday
							.getMonth()
					&& getLl().get(i).getSentDate().getYear() == tempToday
							.getYear()) {
				mp.setBorder(BorderFactory.createLineBorder(Color.black, 2));
			}
			if (compareMails(getActiveMail(), getLl().get(i))) {
				mp.setBorder(BorderFactory.createLineBorder(Color.black, 4));
			}

			/**
			 * Bei Klick auf Panel wird Inhalt der Email in der Großansicht
			 * dargestellt.
			 */
			mp.addMouseListener(new MouseAdapter() {
				@Override
				public void mouseClicked(MouseEvent e) {

					contentTextArea.setContentType(mp.getMail().getTextType());
					contentTextArea.getDocument().putProperty(
							"IgnoreCharsetDirective", true);
					fromTextField.setText(von[speak]
							+ mp.getFromMailPanelTextField().getText());

					toTextField.setText(an[speak] + mp.getToClickedInfo());
					betreffTextField.setText(betreff[speak]
							+ mp.getBetreffMailPanelTextField().getText());
					contentTextArea.setText(mp.getContentMailPanelTextField()
							.getText());
					aktuellerBetreffTextField.setText(mp
							.getBetreffMailPanelTextField().getText());
					aktuellerBetreffTextField.setCaretPosition(0);
					fromTextField.setCaretPosition(0);
					toTextField.setCaretPosition(0);
					betreffTextField.setCaretPosition(0);
					contentTextArea.setCaretPosition(0);

					// Die nachfolgenden Werte werden gesetzt um die Mail
					// vor/zurück Pfeile zu realisieren
					createMailPanelList(false);
					setActiveMail(mp.getMail());
					setActiveMailID(mp.getID());
					setComboBoxAttachments();

					setVsl(geteMailListScrollPane().getVerticalScrollBar()
							.getValue());
					setHsl(geteMailListScrollPane().getHorizontalScrollBar()
							.getValue());
					createMailPanelList(false);
					geteMailListScrollPane().getVerticalScrollBar().setValue(
							getVsl());
					geteMailListScrollPane().getHorizontalScrollBar().setValue(
							getHsl());
					geteMailListGroundPanel().revalidate();
					geteMailListScrollPane().revalidate();

				}

				public void mousePressed(MouseEvent e) {
					evaluatePopup(e);
				}

				public void mouseReleased(MouseEvent e) {
					evaluatePopup(e);
				}

			});

			/**
			 * Bei Klick auf Panel wird Inhalt der Email in der Großansicht
			 * dargestellt.
			 */

			mp.getBetreffMailPanelTextField().addMouseListener(
					new MouseAdapter() {
						@Override
						public void mouseClicked(MouseEvent e) {

							contentTextArea.setContentType(mp.getMail()
									.getTextType());
							contentTextArea.getDocument().putProperty(
									"IgnoreCharsetDirective", true);
							fromTextField.setText(von[speak]
									+ mp.getFromMailPanelTextField().getText());
							toTextField.setText(an[speak]
									+ mp.getToClickedInfo());
							betreffTextField.setText(betreff[speak]
									+ mp.getBetreffMailPanelTextField()
											.getText());
							contentTextArea.setText(mp
									.getContentMailPanelTextField().getText());
							aktuellerBetreffTextField.setText(mp
									.getBetreffMailPanelTextField().getText());
							aktuellerBetreffTextField.setCaretPosition(0);
							fromTextField.setCaretPosition(0);
							toTextField.setCaretPosition(0);
							betreffTextField.setCaretPosition(0);
							contentTextArea.setCaretPosition(0);

							// Die nachfolgenden Werte werden gesetzt um die
							// Mail
							// vor/zurück Pfeile zu realisieren

							setActiveMail(mp.getMail());
							setActiveMailID(mp.getID());
							setComboBoxAttachments();

							setVsl(geteMailListScrollPane()
									.getVerticalScrollBar().getValue());
							setHsl(geteMailListScrollPane()
									.getHorizontalScrollBar().getValue());
							createMailPanelList(false);
							geteMailListScrollPane().getVerticalScrollBar()
									.setValue(getVsl());
							geteMailListScrollPane().getHorizontalScrollBar()
									.setValue(getHsl());
							geteMailListGroundPanel().revalidate();
							geteMailListScrollPane().revalidate();
						}

						public void mousePressed(MouseEvent e) {
							evaluatePopup(e);
						}

						public void mouseReleased(MouseEvent e) {
							evaluatePopup(e);
						}
					});

			/**
			 * Bei Klick auf Panel wird Inhalt der Email in der Großansicht
			 * dargestellt.
			 */

			mp.getFromMailPanelTextField().addMouseListener(new MouseAdapter() {
				@Override
				public void mouseClicked(MouseEvent e) {

					contentTextArea.setContentType(mp.getMail().getTextType());
					contentTextArea.getDocument().putProperty(
							"IgnoreCharsetDirective", true);
					fromTextField.setText(von[speak]
							+ mp.getFromMailPanelTextField().getText());
					toTextField.setText(an[speak] + mp.getToClickedInfo());
					betreffTextField.setText(betreff[speak]
							+ mp.getBetreffMailPanelTextField().getText());
					contentTextArea.setText(mp.getContentMailPanelTextField()
							.getText());

					aktuellerBetreffTextField.setText(mp
							.getBetreffMailPanelTextField().getText());
					aktuellerBetreffTextField.setCaretPosition(0);
					fromTextField.setCaretPosition(0);
					toTextField.setCaretPosition(0);
					betreffTextField.setCaretPosition(0);
					contentTextArea.setCaretPosition(0);

					// Die nachfolgenden Werte werden gesetzt um die
					// Mail
					// vor/zurück Pfeile zu realisieren

					setActiveMail(mp.getMail());
					setActiveMailID(mp.getID());
					setComboBoxAttachments();

					setVsl(geteMailListScrollPane().getVerticalScrollBar()
							.getValue());
					setHsl(geteMailListScrollPane().getHorizontalScrollBar()
							.getValue());
					createMailPanelList(false);
					geteMailListScrollPane().getVerticalScrollBar().setValue(
							getVsl());
					geteMailListScrollPane().getHorizontalScrollBar().setValue(
							getHsl());
					geteMailListGroundPanel().revalidate();
					geteMailListScrollPane().revalidate();
				}

				public void mousePressed(MouseEvent e) {
					evaluatePopup1(e);
				}

				public void mouseReleased(MouseEvent e) {
					evaluatePopup1(e);
				}
			});

			/**
			 * Bei Klick auf Panel wird Inhalt der Email in der Großansicht
			 * dargestellt.
			 */

			mp.getContentMailPanelTextField().addMouseListener(
					new MouseAdapter() {
						@Override
						public void mouseClicked(MouseEvent e) {

							contentTextArea.setContentType(mp.getMail()
									.getTextType());
							contentTextArea.getDocument().putProperty(
									"IgnoreCharsetDirective", true);
							fromTextField.setText(von[speak]
									+ mp.getFromMailPanelTextField().getText());
							toTextField.setText(an[speak]
									+ mp.getToClickedInfo());
							betreffTextField.setText(betreff[speak]
									+ mp.getBetreffMailPanelTextField()
											.getText());
							contentTextArea.setText(mp
									.getContentMailPanelTextField().getText());

							aktuellerBetreffTextField.setText(mp
									.getBetreffMailPanelTextField().getText());
							aktuellerBetreffTextField.setCaretPosition(0);
							fromTextField.setCaretPosition(0);
							toTextField.setCaretPosition(0);
							betreffTextField.setCaretPosition(0);
							contentTextArea.setCaretPosition(0);

							// Die nachfolgenden Werte werden gesetzt um die
							// Mail
							// vor/zurück Pfeile zu realisieren

							setActiveMail(mp.getMail());
							setActiveMailID(mp.getID());
							setComboBoxAttachments();

							setVsl(geteMailListScrollPane()
									.getVerticalScrollBar().getValue());
							setHsl(geteMailListScrollPane()
									.getHorizontalScrollBar().getValue());
							createMailPanelList(false);
							geteMailListScrollPane().getVerticalScrollBar()
									.setValue(getVsl());
							geteMailListScrollPane().getHorizontalScrollBar()
									.setValue(getHsl());
							geteMailListGroundPanel().revalidate();
							geteMailListScrollPane().revalidate();
						}

						public void mousePressed(MouseEvent e) {
							evaluatePopup(e);
						}

						public void mouseReleased(MouseEvent e) {
							evaluatePopup(e);
						}

					});

			// Panel wird dem GroundPanel hinzugefügt und damit angezeigt
			geteMailListGroundPanel().add(mp);

			// Liste dient der Realisierung der Email vor/zurück Funktion

			panelList.add(mp);

			/**
			 * Workarround, da die ScrollPane es nicht merkt, wenn dynamisch
			 * Panels hinzugefügt werden Höhe des GroundPanels wird dynamisch
			 * mit der Anzahl der geaddeten Panels multipliziert und
			 * dementsprechnd angepasst
			 */
			geteMailListGroundPanel().setPreferredSize(
					new Dimension(a, ((counter) * b)));

			if (osx.equals(opsys)) {
				if (i == 0) {
					Application application = Application.getApplication();
					application.requestUserAttention(true);
				}
			}
		}
		counter = 0;
	}

	/**
	 * Erzeugt Kontextmenü für Emails bei Klick auf alle Felder ausser
	 * FromTextField
	 * 
	 * @param evt
	 *            Ausgeführtes Mouseevent
	 */
	public void showMenu(MouseEvent evt) {
		JPopupMenu menu = new JPopupMenu();

		JMenuItem weiterleiten = new JMenuItem(weiterleitenTT[speak]);
		weiterleiten.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				/**
				 * Zu Beginn ist activeMail = null, dies wird hier abgfangen,
				 * activeMail bekommt einen Wert, sobald ein MailPanel
				 * angeklickt wird
				 */
				if (activeMail != null) {
					/**
					 * Neue Email Fenster wird geöffnet mit dem Betreff und dem
					 * Inhalt der aktuell seletierten Email
					 */
					new NewMailWindow(activeMail.getBetreff(), activeMail
							.getText()).setVisible(true);
				} else {
					/**
					 * Rückmeldung an Nutzer das keine Email selektiert ist
					 */
					new NotifyFrame(tooltipNoMailWTL[speak]).setVisible(true);
				}
			}
		});
		menu.add(weiterleiten);

		JMenuItem antworten = new JMenuItem(antwortenTT[speak]);
		antworten.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				/**
				 * Zu Beginn ist activeMail = null, dies wird hier abgfangen,
				 * activeMail bekommt einen Wert, sobald ein MailPanel
				 * angeklickt wird
				 */
				if (activeMail != null) {
					/**
					 * Neue Email Fenster wird geöffnet mit demEmpfänger,
					 * Betreff und dem Inhalt der aktuell seletierten Email
					 */
					new NewMailWindow(activeMail.getFrom(), activeMail
							.getBetreff(), activeMail.getText())
							.setVisible(true);
				} else {

					/**
					 * Rückmeldung an Nutzer das keine Email selektiert ist
					 */
					new NotifyFrame(tooltipNoMailAns[speak]).setVisible(true);
				}
			}
		});
		menu.add(antworten);

		JMenuItem antwortAnAlle = new JMenuItem(antwortenalle[speak]);
		antwortAnAlle.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				/**
				 * Zu Beginn ist activeMail = null, dies wird hier abgfangen,
				 * activeMail bekommt einen Wert, sobald ein MailPanel
				 * angeklickt wird
				 */
				if (activeMail != null) {
					/**
					 * Neue Email Fenster wird geöffnet mit demEmpfänger,
					 * Betreff und dem Inhalt der aktuell seletierten Email
					 */
					new NewMailWindow(activeMail.getFrom()
							+ activeMail.getTo().toString(), activeMail
							.getBetreff(), activeMail.getText())
							.setVisible(true);
				} else {

					/**
					 * Rückmeldung an Nutzer das keine Email selektiert ist
					 */
					new NotifyFrame(tooltipNoMailAns[speak]).setVisible(true);
				}
			}
		});
		menu.add(antwortAnAlle);

		JMenuItem loeschen = new JMenuItem(mailloeschen[speak]);
		loeschen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				/**
				 * Zu Beginn ist activeMail = null, dies wird hier abgfangen,
				 * activeMail bekommt einen Wert, sobald ein MailPanel
				 * angeklickt wird
				 */
				if (activeMail != null) {

					mainInstance.getProgressBar().setVisible(true);

					// Lösch Befehl
					mme.deleteMail(getActiveMail());
					// MailPanelListe wird ausgehängt
					geteMailListScrollPane().setViewportView(null);
					// MailPanelListe wird neu erstellt
					createMailPanelList(true);
					// MailPanelListe wird eingehängt
					geteMailListScrollPane().setViewportView(
							eMailListGroundPanel);
					// neu zeichnen
					mainInstance.setProgressBarVisibleFalse();
					repaint();

				} else {
					/**
					 * Rückmeldung an Nutzer das keine Email selektiert ist
					 */
					new NotifyFrame(tooltipNoMail[speak]).setVisible(true);
				}

			}
		});
		menu.add(loeschen);

		menu.show(evt.getComponent(), evt.getX(), evt.getY());
	}

	/**
	 * Erzeugt Kontextmenü für Emails bei Klick auf FromTextField
	 * 
	 * @param evt
	 *            Ausgeführtes Mouseevent
	 */
	public void showMenu1(MouseEvent evt) {
		JPopupMenu menu = new JPopupMenu();

		JMenuItem kontaktHinzu = new JMenuItem(speichern[speak]);

		kontaktHinzu.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent arg0) {
				new NewContactWindow(getActiveMail().getFrom())
						.setVisible(true);

			}

		});
		menu.add(kontaktHinzu);

		JMenuItem weiterleiten = new JMenuItem(weiterleitenTT[speak]);
		weiterleiten.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				/**
				 * Zu Beginn ist activeMail = null, dies wird hier abgfangen,
				 * activeMail bekommt einen Wert, sobald ein MailPanel
				 * angeklickt wird
				 */
				if (activeMail != null) {
					/**
					 * Neue Email Fenster wird geöffnet mit dem Betreff und dem
					 * Inhalt der aktuell seletierten Email
					 */
					new NewMailWindow(activeMail.getBetreff(), activeMail
							.getText()).setVisible(true);
				} else {
					/**
					 * Rückmeldung an Nutzer das keine Email selektiert ist
					 */
					new NotifyFrame(tooltipNoMailWTL[speak]).setVisible(true);
				}
			}
		});
		menu.add(weiterleiten);

		JMenuItem antworten = new JMenuItem(antwortenTT[speak]);
		antworten.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				/**
				 * Zu Beginn ist activeMail = null, dies wird hier abgfangen,
				 * activeMail bekommt einen Wert, sobald ein MailPanel
				 * angeklickt wird
				 */
				if (activeMail != null) {
					/**
					 * Neue Email Fenster wird geöffnet mit demEmpfänger,
					 * Betreff und dem Inhalt der aktuell seletierten Email
					 */
					new NewMailWindow(activeMail.getFrom(), activeMail
							.getBetreff(), activeMail.getText())
							.setVisible(true);
				} else {

					/**
					 * Rückmeldung an Nutzer das keine Email selektiert ist
					 */
					new NotifyFrame(tooltipNoMailAns[speak]).setVisible(true);
				}
			}
		});
		menu.add(antworten);

		JMenuItem antwortAnAlle = new JMenuItem(antwortenalle[speak]);
		antwortAnAlle.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				/**
				 * Zu Beginn ist activeMail = null, dies wird hier abgfangen,
				 * activeMail bekommt einen Wert, sobald ein MailPanel
				 * angeklickt wird
				 */
				if (activeMail != null) {
					/**
					 * Neue Email Fenster wird geöffnet mit demEmpfänger,
					 * Betreff und dem Inhalt der aktuell seletierten Email
					 */
					new NewMailWindow(activeMail.getFrom()
							+ activeMail.getTo().toString(), activeMail
							.getBetreff(), activeMail.getText())
							.setVisible(true);
				} else {

					/**
					 * Rückmeldung an Nutzer das keine Email selektiert ist
					 */
					new NotifyFrame(tooltipNoMailAns[speak]).setVisible(true);
				}
			}
		});
		menu.add(antwortAnAlle);

		JMenuItem loeschen = new JMenuItem(mailloeschen[speak]);
		loeschen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				/**
				 * Zu Beginn ist activeMail = null, dies wird hier abgfangen,
				 * activeMail bekommt einen Wert, sobald ein MailPanel
				 * angeklickt wird
				 */
				if (activeMail != null) {
					mainInstance.setProgressBarVisibleTrue();
					// Lösch Befehl
					mme.deleteMail(getActiveMail());
					// MailPanelListe wird ausgehängt
					geteMailListScrollPane().setViewportView(null);
					// MailPanelListe wird neu erstellt
					createMailPanelList(true);
					// MailPanelListe wird eingehängt
					geteMailListScrollPane().setViewportView(
							eMailListGroundPanel);
					// neu zeichnen
					mainInstance.setProgressBarVisibleFalse();
					repaint();

				} else {
					/**
					 * Rückmeldung an Nutzer das keine Email selektiert ist
					 */
					new NotifyFrame(tooltipNoMail[speak]).setVisible(true);
				}

			}
		});
		menu.add(loeschen);

		menu.show(evt.getComponent(), evt.getX(), evt.getY());
	}

	/**
	 * Testet ob ein Mouse Event ein Rechtsklick ist
	 * 
	 * @param e
	 *            Mause Event welches ausgeführt wurde
	 */
	private void evaluatePopup(MouseEvent e) {
		if (e.isPopupTrigger()) {
			showMenu(e);
		}
	}

	/**
	 * Testet ob ein Mouse Event ein Rechtsklick ist
	 * 
	 * @param e
	 *            Mause Event welches ausgeführt wurde
	 */
	private void evaluatePopup1(MouseEvent e) {
		if (e.isPopupTrigger()) {
			showMenu1(e);
		}
	}

	/**
	 * Hintergrund Task der Emailsabruft
	 */
	public void mailListener() {
		new Thread(new Runnable() {
			@Override
			public void run() {

				Properties props = new Properties();

				OptionReader or = new OptionReader();
				try {
					or.getOpionsFromFile();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

				String mailOptionsTemp = or.getMailOpt1();
				setMailOptions(mailOptionsTemp.split(","));

				String host = mailOptions[1];
				String username = mailOptions[0];
				String password = mailOptions[7];
				String provider = mailOptions[6];

				String time = "2000";

				try {

					// Connect to the server
					Session session = Session.getDefaultInstance(props, null);
					System.out.println("Session");
					Store store = session.getStore(provider);
					System.out.println("store");
					store.connect(host, username, password);
					System.out.println("login");

					// open the inbox folder
					inbox = store.getFolder("INBOX");
					System.out.println("store inbox");
					inbox.open(Folder.READ_WRITE);
					System.out.println("inbox open");

					// Add messageCountListener to listen for new messages
					inbox.addMessageCountListener(new MessageCountAdapter() {
						public void messagesAdded(MessageCountEvent ev) {
							mainInstance.setProgressBarVisibleTrue();

							// MailPanelListe wird neu erstellt
							createMailPanelList(true);
							// Meldung wird ausgehängt
							geteMailListScrollPane().setViewportView(null);
							// MailPanelListe wird eingehängt
							geteMailListScrollPane().setViewportView(
									eMailListGroundPanel);
							mainInstance.setProgressBarVisibleFalse();
							// neu zeichnen
							repaint();

						}
					});

					// Check mail once in "freq" MILLIseconds
					int freq = Integer.parseInt(time);
					boolean supportsIdle = false;
					try {
						if (inbox instanceof IMAPFolder) {
							IMAPFolder f = (IMAPFolder) inbox;
							f.idle();
							supportsIdle = true;
						}
					} catch (FolderClosedException fex) {
						throw fex;
					} catch (MessagingException mex) {
						supportsIdle = false;
					}
					for (;;) {
						if (supportsIdle && inbox instanceof IMAPFolder) {
							IMAPFolder f = (IMAPFolder) inbox;
							f.idle();
							System.out.println("IDLE done");
						} else {
							Thread.sleep(freq); // sleep for freq milliseconds

							// This is to force the IMAP server to send us
							// EXISTS notifications.
							inbox.getMessageCount();
						}
					}

				} catch (Exception ex) {
					ex.printStackTrace();
				}
			}
		}).start();
	}

	/**
	 * Lässt comboBox erscheinen wenn Mail Anhänge hat
	 */
	public void setComboBoxAttachments() {

		if (getActiveMail().getAttachments().isEmpty()) {

			System.out.println("isemty!!");
			getBtnAnzeigen().setVisible(false);
			getBtnSpeichern().setVisible(false);
			getComboBox().setVisible(false);
			// TODO
		} else {
			attachmentPanel.remove(comboBox);
			setComboBox(new JComboBox());

			for (File f : getActiveMail().getAttachments()) {
				getComboBox().addItem(f);
				System.out.println(f.getAbsolutePath());

			}
			comboBox.setSelectedIndex(0);
			GridBagConstraints gbc_comboBox = new GridBagConstraints();
			gbc_comboBox.insets = new Insets(0, 0, 0, 5);
			gbc_comboBox.fill = GridBagConstraints.HORIZONTAL;
			gbc_comboBox.gridx = 1;
			gbc_comboBox.gridy = 0;

			attachmentPanel.add(comboBox, gbc_comboBox);
			comboBox.setVisible(true);
			comboBox.revalidate();
			comboBox.repaint();
			getBtnAnzeigen().setVisible(true);
			getBtnSpeichern().setVisible(true);
		}

	}

	/**
	 * Überprüft ob 2 Mail Obekte gleich sind
	 * 
	 * @param mail1
	 *            die eine mail
	 * @param mail
	 *            die andere mail
	 * @return true wenn gleich
	 */
	public boolean compareMails(Mail mail1, Mail mail) {
		boolean ret = false;
		if (mail1 != null && mail != null) {

			String mailServer = mail1.getBetreff()
					+ mail1.getSentDate().toString() + mail1.getText();

			String mailLocal = mail.getBetreff()
					+ mail.getSentDate().toString() + mail.getText();

			if (mailServer.equals(mailLocal)) {
				ret = true;

			}
		}

		return ret;

	}

	public int getHsl() {
		return hsl;
	}

	public void setHsl(int hsl) {
		this.hsl = hsl;
	}

	public int getVsl() {
		return vsl;
	}

	public void setVsl(int vsl) {
		this.vsl = vsl;
	}

}
